package com.cs.beneficios.business.entity;
import com.cs.beneficios.business.model.AtributoVO;
import com.cs.beneficios.business.model.BeneficiarioVO;
//import com.cs.beneficios.business.model.ProgramaVO;
import com.cs.beneficios.common.ConnectionFactory;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;

//import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;

public class RenovarDAO 
{
  /**
   * Conexion a la base de datos.
   */
  private Connection conn = null;
  private ConnectionFactory cf;

  /**
   * Constructor que inicializa la conexion con la base de datos.
   * @param conn Conexion con la base de datos.
   */
  
  public RenovarDAO(ConnectionFactory cf)
  {
    this.cf = cf;
    try{
      this.conn = this.cf.getConnection();
    }catch(SQLException e){}
  }
  
  public Collection GetAtributosSubpro(String codesubpro) throws SQLException{
    
    int codeSub = Integer.parseInt(codesubpro.trim());
    String query = "SELECT CODIGO, NOMBRE, TIPO_DATO, TIPO_ATRIBUTO "+
                   "FROM TCS_BEN_SUBP_ATR_BENEFICIARIO WHERE SBPR_CODIGO="+codeSub+" "+
                   "AND VIGENCIA='A' AND CAMPO_A2 IS NULL";
    List lAtributos = new LinkedList();               
    ResultSet rst = null;
    rst = cf.getRecordsRset(query,null,conn);    
    AtributoVO objatri;
    while(rst.next())
    {
        objatri = new AtributoVO();
        objatri.setCodatributo(rst.getString("CODIGO"));
        objatri.setNombre(rst.getString("NOMBRE"));
        objatri.setTipodato(rst.getString("TIPO_DATO"));
        objatri.setTipoatributo(rst.getString("TIPO_ATRIBUTO"));
        lAtributos.add(objatri);
        objatri = null;
    }
    return lAtributos;
  }
  
  public String Getbeneficiarioatri(String tipodato, String codebene, String codeatri) throws SQLException{
    
    String strSeleccion = "";
    String strValor = null;
    if(tipodato.equals("N"))
    {
       strSeleccion = "VALOR_NUM_ATR";
    }else if(tipodato.equals("F"))
    {
      strSeleccion = "TO_CHAR(VALOR_FEC_ATR,'DD/MM/YYYY')";
    }else
    {
      strSeleccion = "VALOR_CAR_ATR";
    }
    
    int codbeneficiario = Integer.parseInt(codebene.trim());
    int codatri = Integer.parseInt(codeatri.trim());
    String query = "SELECT "+strSeleccion+" valor FROM TCS_BEN_BENEFICIARIO_ATRIBUTO "+
                   "WHERE SAB_CODIGO = "+codatri+" "+
                   "AND BEN_CODIGO = "+codbeneficiario;
    System.out.println(query);
    ResultSet rst = null;
    rst = cf.getRecordsRset(query,null,conn);    
    if(rst.next())
    {
      strValor = rst.getString("valor");
    }
    return strValor;
  }
  
  /*public ResultSet Getbeneficiarioatri(String tipodato, String codebene, String codeatri) throws SQLException{
    
    String strSeleccion = "";
    if(tipodato.equals("N"))
    {
       strSeleccion = "VALOR_NUM_ATR";
    }else if(tipodato.equals("F"))
    {
      strSeleccion = "TO_CHAR(VALOR_FEC_ATR,'DD/MM/YYYY')";
    }else
    {
      strSeleccion = "VALOR_CAR_ATR";
    }
    
    int codbeneficiario = Integer.parseInt(codebene.trim());
    int codatri = Integer.parseInt(codeatri.trim());
    String query = "SELECT "+strSeleccion+" valor FROM TCS_BEN_BENEFICIARIO_ATRIBUTO "+
                   "WHERE SAB_CODIGO = "+codatri+" "+
                   "AND BEN_CODIGO = "+codbeneficiario+" "+
                   "AND CAMPO_F1 = (SELECT MAX(CAMPO_F1) "+
                   "FROM TCS_BEN_BENEFICIARIO_ATRIBUTO WHERE SAB_CODIGO = "+codatri+" "+
                   "AND BEN_CODIGO = "+codbeneficiario+")";
    System.out.println(query);
    ResultSet rst = null;
    rst = cf.getRecordsRset(query,null,conn);    
    return rst;
  }*/
  
  public ResultSet Getbeneficioatri(String tipodato, String codebeneotor, String codeatri) throws SQLException{
    
    String strSeleccion = "";
    if(tipodato.equals("N"))
    {
       strSeleccion = "VALOR_NUM_ATR";
    }else if(tipodato.equals("F"))
    {
      strSeleccion = "TO_CHAR(VALOR_FEC_ATR,'DD/MM/RRRR')";
    }else
    {
      strSeleccion = "VALOR_CAR_ATR";
    }
    
    int codbeneotor = Integer.parseInt(codebeneotor.trim());
    int codatri = Integer.parseInt(codeatri.trim());
    String query = "SELECT "+strSeleccion+" valor FROM TCS_BEN_BENEFICIO_ATRIBUTO "+
                   "WHERE BOT_CODIGO= "+codbeneotor+" "+
                   "AND SAB_CODIGO = "+codatri+" ";
    ResultSet rst = null;
    rst = cf.getRecordsRset(query,null,conn);    
    return rst;
  }
  
  public List GetBeneficioOtorgado(String codesubpro, String codebene) throws SQLException{
    
    int codbeneficiario = Integer.parseInt(codebene.trim());
    int codsubpro = Integer.parseInt(codesubpro.trim());
    List lretornar = new LinkedList();
    String query = "SELECT MAX(CODIGO) codbot, SEDE_CODIGO sede FROM TCS_BEN_BENEFICIO_OTORGADO "+
                   "WHERE SBPR_CODIGO="+codsubpro+" "+ 
                   "AND BEN_CODIGO="+codbeneficiario+" "+
                   "AND FECHA_BENEFICIO=(SELECT MAX(FECHA_BENEFICIO) FROM TCS_BEN_BENEFICIO_OTORGADO "+
                   "WHERE SBPR_CODIGO="+codsubpro+" AND BEN_CODIGO="+codbeneficiario+") "+
                   "GROUP BY SEDE_CODIGO";
    ResultSet rst = null;
    rst = cf.getRecordsRset(query,null,conn);
    if(rst.next())
    {
      lretornar.add(rst.getString("codbot"));
      lretornar.add(rst.getString("sede"));
    }
    return lretornar;
  }
  
  public void GetBeneOtorDesabilitar(String codesubpro, String codebene, String codesede) throws SQLException{
    
    int codbeneficiario = Integer.parseInt(codebene.trim());
    int codsubpro = Integer.parseInt(codesubpro.trim());
    int codsede = Integer.parseInt(codesede.trim());
    String query = "SELECT CODIGO FROM TCS_BEN_BENEFICIO_OTORGADO "+
                   "WHERE SBPR_CODIGO="+codsubpro+" "+
                   "AND BEN_CODIGO="+codbeneficiario+" "+ 
                   "AND SEDE_CODIGO="+codsede+" "+ 
                   "AND CAMPO_A1 IS NULL";
    ResultSet rst = null;
    rst = cf.getRecordsRset(query,null,conn);
    while(rst.next())
    {
      int codbeneotor = rst.getInt("CODIGO");
      ModiBeneotorCampoA1(codbeneotor);
    }
   
  }
  
  public List GetBeneficiarios(String codesubpro, String codesede) throws SQLException{
    
    int codsubpro = Integer.parseInt(codesubpro.trim());
    int codsede = Integer.parseInt(codesede.trim());
    String query = "SELECT DISTINCT bot.BEN_CODIGO codebene,ben.PRIMER_NOMBRE nom1bene,ben.SEGUNDO_NOMBRE nom2bene, "+
                   "ben.PRIMER_APELLIDO ape1bene, ben.SEGUNDO_APELLIDO ape2bene, ben.TIPO_DOCUMENTO tipodoc, "+
                   "ben.NUMERO_DOCUMENTO numdoc, TO_CHAR "+
                   "   ((SELECT MAX(FECHA_BENEFICIO) "+
                   "   FROM TCS_BEN_BENEFICIO_OTORGADO bot1,TCS_BEN_BENEFICIARIO ben1 "+
                   "   WHERE bot1.SBPR_CODIGO="+codsubpro+" AND bot1.SEDE_CODIGO="+codsede+
                   "   AND bot1.BEN_CODIGO=ben1.codigo),'DD/MM/RRRR')fecha "+
                   "FROM TCS_BEN_BENEFICIO_OTORGADO bot,TCS_BEN_BENEFICIARIO ben, "+
                   "TCS_BEN_SUBPROGRAMA sub "+
                   "WHERE bot.SBPR_CODIGO = "+codsubpro+
                   " AND  bot.SEDE_CODIGO = "+codsede+
                   " AND  ben.CODIGO = bot.BEN_CODIGO "+
                   " AND sub.CODIGO = bot.SBPR_CODIGO "+
                   " AND (CASE WHEN DECODE(bot.CAMPO_A1,'I',-1,TO_NUMBER(SYSDATE - (SELECT MAX(CAMPO_F1) "+
                   "                                                               FROM TCS_BEN_BENEFICIO_OTORGADO "+
                   "                                                               WHERE SBPR_CODIGO="+codsubpro+
                   "                                                               AND BEN_CODIGO=ben.CODIGO "+  
                   "                                                               AND SEDE_CODIGO="+codsede+"))) "+
                   "     >= to_number(nvl(sub.CAMPO_A3,0)+1) "+
                   "     THEN 'Si' ELSE 'No' END) = 'Si' ";

    //System.out.println(query);
    ResultSet rst = null;
    rst = cf.getRecordsRset(query,null,conn);
    List lbeneficiarios = new LinkedList();
    BeneficiarioVO benevo = null;
    while(rst.next())
    {
      benevo = new BeneficiarioVO();
      benevo.setCode(new Long(rst.getString("codebene")));
      benevo.setNombre1(rst.getString("nom1bene"));
      benevo.setNombre2(rst.getString("nom2bene"));
      benevo.setPrimerApellido(rst.getString("ape1bene"));
      benevo.setSegundoApellido(rst.getString("ape2bene"));
      if(rst.getString("tipodoc").equals("O"))
      {
        benevo.setTipoDocumento("NO TIENE");
      }else if(rst.getString("tipodoc").equals("C"))
      {
        benevo.setTipoDocumento("CEDULA DE CIUDADANIA");
      }else if(rst.getString("tipodoc").equals("E"))
      {
        benevo.setTipoDocumento("CEDULA DE EXTRANJERIA");
      }else if(rst.getString("tipodoc").equals("N"))
      {
        benevo.setTipoDocumento("NIT");
      }else if(rst.getString("tipodoc").equals("P"))
      {
        benevo.setTipoDocumento("PASAPORTR");
      }else if(rst.getString("tipodoc").equals("R"))
      {
        benevo.setTipoDocumento("REGISTRO CIVIL");
      }else if(rst.getString("tipodoc").equals("T"))
      {
        benevo.setTipoDocumento("TARJETA DE IDENTIDAD");
      }else if(rst.getString("tipodoc").equals("I"))
      {
        benevo.setTipoDocumento("NIP");
      }else if(rst.getString("tipodoc").equals("U"))
      {
        benevo.setTipoDocumento("NUIP");
      }else if(rst.getString("tipodoc").equals("S"))
      {
        benevo.setTipoDocumento("NISE");
      }else if(rst.getString("tipodoc").equals("A"))
      {
        benevo.setTipoDocumento("CABILDO");
      }
      
      benevo.setNumeroDocumento(rst.getString("numdoc"));
      benevo.setFechaNacimiento(rst.getString("fecha"));
      lbeneficiarios.add(benevo);
      benevo=null;  
    }
    return lbeneficiarios;
  }
  
  public void ModiBeneotorCampoA1(int codebeneotor)throws SQLException {
   
    String query = "UPDATE TCS_BEN_BENEFICIO_OTORGADO SET "+
                   "CAMPO_A1 = 'I'"+
                   "WHERE CODIGO="+codebeneotor+"";
                   
     int ActualizoCorrectamente = cf.execSql(query, null,conn);
  }
  
  public Connection getConn()
  {
    return conn;
  }
}